Skip to content

Commit 3762500

Browse files
authored
Change SumoBot to deleted_user (#6537)
* Change SumoBot to deleted user * In messaging, when a user who received a message is deleted the sending users outbox will now show the message was to deleted user * When a message in your inbox is from a user who is deleted it will appear as being from deleted user * Extract user check to be DRY
1 parent 599820e commit 3762500

File tree

5 files changed

+51
-12
lines changed

5 files changed

+51
-12
lines changed

kitsune/messages/handlers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,16 @@ def on_user_deletion(self, user: User) -> None:
1313
When a user is deleted:
1414
- Delete their outbox messages
1515
- Keep inbox messages for other users and reassign them to SumoBot
16+
- Update outbox message recipients to SumoBot where the deleted user was a recipient
1617
"""
1718
sumo_bot = Profile.get_sumo_bot()
1819
InboxMessage.objects.filter(to=user).delete()
1920
InboxMessage.objects.filter(sender=user).update(sender=sumo_bot)
21+
22+
# Update outbox messages where the deleted user was a recipient
23+
outbox_messages = OutboxMessage.objects.filter(to=user)
24+
for message in outbox_messages:
25+
message.to.remove(user)
26+
message.to.add(sumo_bot)
27+
2028
OutboxMessage.objects.filter(sender=user).delete()

kitsune/messages/jinja2/messages/inbox.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% extends "messages/base.html" %}
2-
{% from "messages/includes/macros.html" import avatar_link, name_link %}
2+
{% from "messages/includes/macros.html" import avatar_link, display_user %}
33
{% set title = _('Inbox') %}
44
{% set crumbs = [(url('messages.inbox'), _('Messages')),
55
(None, title)] %}
@@ -37,7 +37,7 @@ <h1 class="sumo-page-heading">{{ title }}</h1>
3737
{{ avatar_link(message.sender, default_avatar) }}
3838
</div>
3939
<div class="email-cell from">
40-
{{ name_link(message.sender) }}
40+
{{ display_user(message.sender) }}
4141
</div>
4242
<div class="email-cell date">
4343
{{ datetimeformat(message.created) }}

kitsune/messages/jinja2/messages/includes/macros.html

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
{% from "includes/common_macros.html" import content_editor with context %}
22

3+
{% macro display_user(user) -%}
4+
{% if user.profile.is_system_account %}
5+
{{ _('deleted user') }}
6+
{% else %}
7+
{{ name_link(user) }}
8+
{% endif %}
9+
{%- endmacro %}
10+
311
{% macro avatar_link(user=None, default_avatar=None) -%}
412
{% if user %}
513
<a rel="nofollow" href="{{ profile_url(user) }}">
@@ -42,7 +50,7 @@
4250
{{ avatar_link(message.sender, default_avatar) }}
4351
</div>
4452
<div class="user from">
45-
{{ name_link(message.sender) }} {{ datetimeformat(message.created) }}
53+
{{ display_user(message.sender) }} {{ datetimeformat(message.created) }}
4654
</div>
4755
</div>
4856
</section>
@@ -55,11 +63,11 @@
5563
{% if message.recipients_count > 0 %}
5664
<p><strong>{{ _('To') }}:</strong>
5765
{% set comma = joiner(', ') %}
58-
{% for user in message.to.all() -%}
66+
{% for user in message.to_users -%}
5967
{{ comma() }}
60-
{{ name_link(user) }}
68+
{{ display_user(user) }}
6169
{% else %}
62-
{{ name_link(message.recipient) }}
70+
{{ display_user(message.recipient) }}
6371
{% endfor %}
6472
</p>
6573
{% endif %}

kitsune/messages/jinja2/messages/outbox.html

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% extends "messages/base.html" %}
2-
{% from "messages/includes/macros.html" import avatar_link, name_link %}
2+
{% from "messages/includes/macros.html" import avatar_link, display_user %}
33
{% set title = _('Sent Messages') %}
44
{% set crumbs = [(url('messages.inbox'), _('Messages')),
55
(None, title)] %}
@@ -38,9 +38,7 @@ <h1 class="sumo-page-heading">{{ title }}</h1>
3838
<div class="email-cell sent">{{ datetimeformat(message.created) }}</div>
3939
<div class="email-cell to">
4040
{% for user in message.to.all()[:1] -%}
41-
<a rel="nofollow" href="{{ profile_url(user) }}">
42-
{{ user.profile.display_name }}
43-
</a>
41+
{{ display_user(user) }}
4442
{%- if message.recipients_count > 1 -%}, ...{% endif %}
4543
{%- endfor %}
4644
</div>

kitsune/messages/views.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ def inbox(request):
2626
.prefetch_related("sender__profile")
2727
)
2828
count = messages.count()
29-
3029
messages = paginate(request, messages, per_page=MESSAGES_PER_PAGE, count=count)
3130

3231
return render(
@@ -42,19 +41,25 @@ def read(request, msgid):
4241
was_new = message.unread
4342
if was_new:
4443
message.update(read=True)
44+
4545
initial = {"to": message.sender, "in_reply_to": message.pk}
4646
form = ReplyForm(initial=initial)
4747
response = render(
4848
request,
4949
"messages/read.html",
50-
{"message": message, "form": form, "default_avatar": settings.DEFAULT_AVATAR},
50+
{
51+
"message": message,
52+
"form": form,
53+
"default_avatar": settings.DEFAULT_AVATAR,
54+
},
5155
)
5256
return response
5357

5458

5559
@login_required
5660
def read_outbox(request, msgid):
5761
message = get_object_or_404(OutboxMessage, pk=msgid, sender=request.user)
62+
5863
return render(
5964
request,
6065
"messages/read-outbox.html",
@@ -179,6 +184,26 @@ def preview_async(request):
179184

180185

181186
def _add_recipients(msg):
187+
"""Process and attach recipient information to a message object.
188+
189+
This helper function calculates recipient counts and attaches recipient-related
190+
attributes to the message object for display purposes.
191+
192+
Args:
193+
msg: An OutboxMessage object to process.
194+
195+
Returns:
196+
The modified message object with the following attributes set:
197+
- recipients_count: Total number of individual recipients
198+
- to_groups_count: Total number of group recipients
199+
- recipient: The first recipient if there is exactly one
200+
individual recipient, else None
201+
- to_groups: List of recipient groups with prefetched profiles
202+
203+
Note:
204+
The function expects msg.to and msg.to_group to be prefetched related fields
205+
on the OutboxMessage object.
206+
"""
182207
# Set the counts based on the lists
183208
msg.recipients_count = msg.to.all().count()
184209
msg.to_groups_count = msg.to_group.all().count()

0 commit comments

Comments
 (0)